﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>
using namespace std;
void settest()
{
	//set不存在相同数据
	set<int> s;
	//插入时不会插入重复数据
	s.insert(5);
	s.insert(5);
	s.insert(1);
	s.insert(1);
	s.insert(9);
	s.insert(2);
	s.insert(3);
	for (auto e : s) {
		cout << e << " ";
	}
	cout << endl;

	cout << s.erase(7) << " " << s.erase(5) << endl;; //没有此值，返回假(0)。若存在此值，返回真(1)
	set<int>::iterator its = --s.end();
	s.erase(its); //删除接口为迭代器时没有返回值
	//由于set中没有重复数据，所以count统计时只会返回1或0
	cout << s.count(3) << " " << s.count(9) << " " << s.count(7) << endl; //count返回元素数量

	set<int>::iterator sit = s.begin();
	while (sit != s.end()) {
		//*it += 8; set中的数据不能被修改
		cout << *sit << " ";
	}
	cout << endl;

	set<int>::iterator it = s.find(3);
	if (it == s.end()) {
		cout << "没有找到" << endl;
	}
	else {
		cout << "找到了" << endl;
	}

	cout << endl;
}
void multisettest()
{
	//multiset容器可以存在相同数据
	multiset<int> s;
	//插入时可以插入相同数据
	s.insert(5);
	s.insert(5);
	s.insert(1);
	s.insert(1);
	s.insert(9);
	s.insert(2);
	s.insert(3);
	for (auto e : s) {
		cout << e << " ";
	}
	cout << endl;

	cout << s.count(5) << " " << s.count(9) << " " << s.count(7) << endl;
	
	cout << endl;
}

void maptest()
{
	map<string, string> m;
	m.insert(pair<string, string>("apple", "苹果"));

	pair<string, string> p = { "string", "字符串" };
	m.insert(p);

	//make_pair可理解为pair<T1, T2>，是一个函数模板，写法简单
	m.insert(make_pair("sort", "排序")); //C++ 98中不支持多参数隐式类型转换，通常用make_pair
	m.insert({ "vector", "顺序表" });  //C++ 11中支持多参数隐式类型转换(多参数构造函数)

	map<string, string>::iterator it = m.begin();
	while (it != m.end()) {
		//cout << *it << endl;  map存储的元素是pair对象。pair不支持流操作
		cout << (*it).first << " : " << (*it).second << endl;
		it++;
	}
	cout << endl;

	for (auto e : m) {
		cout << e.first << " : " << e.second << endl;
	}
	cout << endl << endl;
}

void mapuse()
{
	map<string, string> m;
	m.insert(make_pair("sort", "排序"));
	m.insert(make_pair("string", "字符串"));
	m.insert(make_pair("sort", "xxx"));
	

}
int main() {
	//settest();
	//multitest();
	//maptest();
	mapuse();
	return 0;
}